<?php
class TetelekController extends AppController {

	var $name = 'Tetelek';
	var $scaffold;
	var $uses = array('Bizonylat', 'Tetel');
	
	function isAuthorized(){
		if($this->Auth->user('csoport') == 1){		//admin jogosultságú júzerek
			return true;
		}
		if($this->request->action == 'getgyorsinfo'){
			return true;
		}
		return false;		//minden más tiltva
	}
	
	function atemel(){
		//tételek átemelése EH-ből BP-be
		
		//todo: olyan pénztár bizonylatok amelyeken több tétel is volt úgy könyvelődtekle, hogy a 0.-tétel a pénztár számlára, az összes többi a bank számlára könyvelődött
		//todo: a bankban volt olyan tétel ahol egy kiadási bizonylatrtra rákerült a következő bizonylat összes bevétele is
		set_time_limit(300);
		$bizonylatIds = $this->Bizonylat->find('all', array(
																'conditions' => array('Bizonylat.osztaly_id' => 202),
																'fields' => 'Bizonylat.id',
																'recursive' => -1
																 ));
		foreach($bizonylatIds as $b){
			$bIds[] = $b['Bizonylat']['id'];
		}
		$atemelendo_tetelek = $this->Bizonylat->Tetel->find('all',
															array(
																'conditions' => array(
																						'Bizonylat.id' => $bIds,
																						'Tetel.spec != ' => 'd',
																						'Tetel.t != ' => 205,
																						'Tetel.k != ' => 205,
																						'OR' => array(
																							'Tetel.t' => array(1265, 1266),
																							'Tetel.k' => array(1265, 1266)
																							)
																						)
																 ));
		//debug($atemelendo_tetelek);die();
		//rendezzük át az eredményt bizonylatok szerint
		$j = 0;
		foreach($atemelendo_tetelek as $i => $a){
			if($a['Bizonylat']['id'] != $atemelendo_tetelek[$i-1]['Bizonylat']['id']){
				unset($a['TartozikSzamla'], $a['KovetelSzamla'], $a['Valutatetel']);
				$aTetel = array_merge($a['Tetel'], array('Gyujto' => $a['Gyujto']));
				unset($a['Tetel'], $a['Gyujto']);
				$a['Tetel'][0] = $aTetel;
				$bizonylatok[$j] = $a;
				$j++;
			}
			else{		//a jelenlegi $a['Tetel']-t az előzőhöz fűzzük
				$aTetel = array_merge($a['Tetel'], array('Gyujto' => $a['Gyujto']));
				array_push($bizonylatok[$j-1]['Tetel'], $aTetel);
			}
			//$regiTetelek[] = $a['Tetel']['id'];		//a régi tételek id-i a törléshez
		}
		/*debug($bizonylatok);/*
		[Bizonylat] => Array
                (
                    [id] => 74928
                    [naplo_id] => 420
                    [osztaly_id] => 202
                    [user_id] => 6
                    [sorszam] => 2
                    [arfolyam] => 1.00
                    [megjegyzes] => 122/2010
                    [datum] => 2010-07-05
                    [hatarido] => 2000-01-01
                    [spec] => 
                    [zarolt] => 0
                    [created] => 2010-09-04 04:49:24
                    [modified] => 2010-09-04 04:49:37
                )

            [Tetel] => Array
                (
                    [0] => Array
                        (
                            [id] => 109868
                            [bizonylat_id] => 74928
                            [sorszam] => 0
                            [szoveg] => postai készpénzátut jóváírás díja
                            [osszeg] => 18.00
                            [t] => 307
                            [k] => 1266
                            [spec] => d
                        )

                    [1] => Array
                        (
                            [id] => 109869
                            [bizonylat_id] => 74928
                            [sorszam] => 1
                            [szoveg] => postai díj terhelés
                            [osszeg] => 155.00
                            [t] => 307
                            [k] => 1266
                            [spec] => d
                        )

                )
*/

		//sorszámok lekérése
		$regiPtNaploId = 420;
		$ujPtNaploId = 335;
		$regiBankNaploId = 436;
		$ujBankNaploId = 363;
		
		$sql = 'SELECT sorszam FROM bizonylatok WHERE naplo_id = ' . $ujPtNaploId . ' ORDER BY sorszam DESC LIMIT 1';
		$bizonylatPtSorszam = $this->Tetel->query($sql);
		$bizonylatPtSorszam = ($bizonylatPtSorszam[0]['bizonylatok']['sorszam'] + 1);
		$sql = 'SELECT sorszam FROM bizonylatok WHERE naplo_id = ' . $ujBankNaploId . ' ORDER BY sorszam DESC LIMIT 1';
		$bizonylatBankSorszam = $this->Tetel->query($sql);
		$bizonylatBankSorszam = ($bizonylatBankSorszam[0]['bizonylatok']['sorszam'] + 1);


		foreach($bizonylatok as $ti => $t){
			//$data['Bizonylat'] felépítése
			$data['Bizonylat'] = array(
											'_method' => 'POST',
											'user_id' => $this->Session->read('Auth.User.id'),
											'datum' => $t['Bizonylat']['datum'],
											'megjegyzes' => $t['Bizonylat']['megjegyzes'],
											'sorszam' => null,
											'osztaly_id' => null,
											'naplo_id' => null
											);
			
			//null-ként jelölt adatok feltöltése
			$data['Bizonylat']['osztaly_id'] = 158;		//BP EH
			
			if($t['Bizonylat']['naplo_id'] == $regiPtNaploId){		//EH Tagsági pénztár napló
				$data['Bizonylat']['naplo_id'] = $ujPtNaploId;		//BP Tagsági pénztár napló
				$data['Bizonylat']['sorszam'] = $bizonylatPtSorszam++;
			}
			elseif($t['Bizonylat']['naplo_id'] == $regiBankNaploId){	//EH Tagsági bank napló
				$data['Bizonylat']['naplo_id'] = $ujBankNaploId;		//BP Tagsági bank napló
				$data['Bizonylat']['sorszam'] = $bizonylatBankSorszam++;
			}
			else{
				debug($t);
				debug($data);
				die('Olyan bizonylatot találtam ami nem a keresett naplókban van!');
			}

			//debug($data);
			//debug($t);
			
			//a számlák megtalálhatóak-e BP-ben? ceg_id = 3
			$k = 0;
			$regiTetelek = array();
			foreach($t['Tetel'] as $tind => $_t){
				//debug($_t);
				$tetel[$k] = array(
										't' => $this->findSzamlaPair($_t['t']),
										'k' => $this->findSzamlaPair($_t['k']),
										'osszeg' => $_t['osszeg'],
										'szoveg' => $_t['szoveg'],
										'accountNev' => null,
										'sorszam' => $tind,
										'gyujto' => array($_t['Gyujto'][0]['id'])
										 );				
				$k++;
				$regiTetelek[] = $_t['id'];
			}
			//debug($tetel);
			$data['Tetel'] = $tetel;
			//debug($data);
			//mentsük el
					/*
		 a bizonylat->rogzithez ezek kellenek:
		 Array
(
    [Tetel] => Array
        (
            [0] => Array
                (
                    [osszeg] => 50
                    [szoveg] => tétel megjegyzés
                    [accountNev] => 9611 Könyvosztás (BBT 40%)
                    [sorszam] => 0
                    [t] => 767
                    [k] => 393
                    [gyujto] => Array
                        (0=>211
                        )

                )

        )

    [Bizonylat] => Array
        (
            [_method] => POST
            [naplo_id] => 213
            [user_id] => 1
            [sorszam] => 254
            [datum] => 2010-11-17
            [osztaly_id] => 100
            [megjegyzes] => megjegyzés
        )

)

		$settings = Array
(
    [cegId] => 2
    [cegNev] => Krisna-völgy
    [ev] => 2010
)
		*/
			$settings = array('cegId' => 3, 'ev' => 2010);
			if(!$this->Bizonylat->rogzit($data, $settings)){
				debug($data);
				print $ti . ' Elfeküdt a rogzit ' . $t['Bizonylat']['id'] . '<hr />';
			}
			else{
				//a régi naplókban ugynezeket jelöljük töröltként
				$sql = 'UPDATE tetelek SET spec = "d" WHERE id IN(' . implode(',', $regiTetelek) . ')';
				//debug($sql);
				$this->Tetel->query($sql);
			}
		}
	}
	
	function findSzamlaPair($szamlaId){
		//debug($szamlaId);
		//megkeressük a számla párját ebben a cégben
		$sql = 'SELECT * FROM szamlak WHERE id = ' . $szamlaId . ' AND ceg_id IN(0, 3) AND ev IN(0, 2010)';
		$tartozikSzamla = $this->Tetel->query($sql);
		if(empty($tartozikSzamla)){
			$sql = 'SELECT * FROM szamlak WHERE id = ' . $szamlaId;
			$keresettSzamla = $this->Tetel->query($sql);
			//debug($keresettSzamla);
			//próbáljuk ebben a cégben megkeresni a számlaszáma alapján
			$sql = 'SELECT * FROM szamlak WHERE szam = ' . $keresettSzamla[0]['szamlak']['szam'] . ' AND ceg_id = 3 AND ev IN(0, 2010)';
			$keresettSzamla = $this->Tetel->query($sql);
			if(empty($keresettSzamla)){
				debug($sql);
			}
			else{
				$szamlaParId = $keresettSzamla[0]['szamlak']['id'];
			}
		}
		else
			$szamlaParId = $tartozikSzamla[0]['szamlak']['id'];
		return $szamlaParId;
	}
	
	public function getGyorsinfo(){
		$params = array(
						'cegId' => $this->Session->read('Settings.cegId'),
						'ev' => $this->Session->read('Settings.ev')
						);
		$this->set('gyorsinfo', array('konyvelvePenztar' => $this->Tetel->getLastKonyveltDatum(381, $params),
									  'konyvelveSyama' => $this->Tetel->getLastKonyveltDatum(382, $params),
									  'konyvelveBank' => $this->Tetel->getLastKonyveltDatum(384, $params),
									  'osszesLaksmi' => $this->Bizonylat->Tetel->getOsszes(38, $params),
									  'osszesTartozas' => $this->Tetel->getOsszes('451*-452*+454', $params),
									  'osszesKoveteles' => $this->Tetel->getOsszes('364*-365*+311',$params)));
		
	}
}
?>